C言語レベルでは、Rubyオブジェクトはデータと振る舞いを分離するポインタベースの階層構造で表現されています。 データと振る舞いを分離 ポインタベースの階層構造を通じて。 klass ポインタはインスタンスをその「関連クラス」(メソッドが存在する場所)に接続し、一方 super superポインタはクラスをその祖先に接続し、Ruby VMが継承を解決するために使用する構造マップを作成します。
1. klassポインタとフラグ
すべてのRubyオブジェクトには、 klass ポインタとビットマスク形式の フラグが含まれます。これらのフラグは、自動的に作成された「仮想クラス」に 'V' というフラグを付けることでシングルトンメソッドの割り当てを処理します。
2. 状態と振る舞いの分離(図24.1)
lucilleのようなインスタンスは、独自の lucille 固有の インスタンス変数を保持していますが、自身のメソッドは持ちません。その klass ポインタはVMを Guitar クラスオブジェクトのメソッドテーブルへと導きます。
3. 継承チェーン
lucille.play()が呼び出されると、 lucille.play() Rubyは klass ポインタに従います。メソッドが Guitarに見つからない場合、 super ポインタに従って Objectへと移動し、 clone または dupへのアクセスが可能になります。
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>